#ifndef THREAD_H
#define THREAD_H

#include <pthread.h>

/** AbstractThread est une classe abstraite dont les objets exécutent la méthode run() dans un
    thread distinct de l'appellant.
    Pour commencer le threading exécuter exec().
  */
class AbstractThread
{
public:
                 AbstractThread();
    virtual      ~AbstractThread();

    int          exec();
    int          exit();
    int          join();

protected:
    virtual void run() = 0;

private:
    /** Méthode statique qui redirige l'exécution du thread vers l'objet concerné.
      */
    static void* moveToObject(void* object);

    pthread_t    threadId_;
};

#endif // THREAD_H
